package com.jdbc;

import java.lang.reflect.Field;
import java.lang.reflect.Method;

/**
 * 反射案例
 */
public class ReflectDemo {

    public static void main(String[] args) throws Exception {
        //获得Class对象
        Class aClass = Student.class;
        //创建对象 调用无参构造方法 newInstance()
        Student student = (Student) aClass.newInstance();
        System.out.println(student);
        //读取类中所有的方法
        Method[] methods = aClass.getDeclaredMethods();
        for (Method method : methods){
            System.out.println(method);
        }
        //读取setName方法 getDeclaredMethod 参数1：方法名 参数2：参数类型
        Method setName = aClass.getDeclaredMethod("setName", String.class);
        //对象.方法(参数)  --> 方法.invoke(对象,参数)
        setName.invoke(student,"张三");
        System.out.println(student);
        //读取类中所有的属性
        Field[] fields = aClass.getDeclaredFields();
        for(Field field : fields){
            System.out.println(field.getType() + " " + field.getName());
        }
        //获得age属性
        Field age = aClass.getDeclaredField("age");
        //修改属性访问权限
        age.setAccessible(true);
        //通过get、set方法读写属性的值  属性.set(对象,值)
        age.set(student,28);
        System.out.println(student);
    }
}
